home *** CD-ROM | disk | FTP | other *** search
- #! /bin/sh
- #
- # Set a default boot entry for GRUB, for the next boot only.
- # Copyright (C) 2004,2009 Free Software Foundation, Inc.
- #
- # GRUB is free software: you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
- # the Free Software Foundation, either version 3 of the License, or
- # (at your option) any later version.
- #
- # GRUB is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- # GNU General Public License for more details.
- #
- # You should have received a copy of the GNU General Public License
- # along with GRUB. If not, see <http://www.gnu.org/licenses/>.
-
- # Initialize some variables.
- transform="s,x,x,"
-
- prefix=/usr
- exec_prefix=${prefix}
- bindir=${exec_prefix}/bin
-
- grub_editenv=${bindir}/`echo grub-editenv | sed ${transform}`
- rootdir=
-
- # Usage: usage
- # Print the usage.
- usage () {
- cat <<EOF
- Usage: $0 [OPTION] entry
- Set the default boot entry for GRUB, for the next boot only.
-
- -h, --help print this message and exit
- -v, --version print the version information and exit
- --root-directory DIR expect GRUB images under the directory DIR
- instead of the root directory
-
- ENTRY is a number or a menu item title.
-
- Report bugs to <bug-grub@gnu.org>.
- EOF
- }
-
- # Check the arguments.
- for option in "$@"; do
- case "$option" in
- -h | --help)
- usage
- exit 0 ;;
- -v | --version)
- echo "grub-install (GNU GRUB ${PACKAGE_VERSION})"
- exit 0 ;;
- --root-directory=*)
- rootdir=`echo "$option" | sed 's/--root-directory=//'` ;;
- -*)
- echo "Unrecognized option \`$option'" 1>&2
- usage
- exit 1
- ;;
- *)
- if test "x$entry" != x; then
- echo "More than one entry?" 1>&2
- usage
- exit 1
- fi
- entry="${option}" ;;
- esac
- done
-
- if test "x$entry" = x; then
- echo "entry not specified." 1>&2
- usage
- exit 1
- fi
-
- # Initialize these directories here, since ROOTDIR was initialized.
- case "$host_os" in
- netbsd* | openbsd*)
- # Because /boot is used for the boot block in NetBSD and OpenBSD, use /grub
- # instead of /boot/grub.
- grub_prefix=`echo /grub | sed ${transform}`
- bootdir=${rootdir}
- ;;
- *)
- # Use /boot/grub by default.
- bootdir=${rootdir}/boot
- ;;
- esac
-
- grubdir=${bootdir}/`echo grub | sed ${transform}`
-
- prev_saved_entry=`$grub_editenv ${grubdir}/grubenv list | sed -n 's/^saved_entry=//p'`
- if [ "$prev_saved_entry" ]; then
- $grub_editenv ${grubdir}/grubenv set prev_saved_entry="$prev_saved_entry"
- else
- $grub_editenv ${grubdir}/grubenv unset prev_saved_entry
- fi
- $grub_editenv ${grubdir}/grubenv set saved_entry="$entry"
-
- # Bye.
- exit 0
-